package com.ruoyi.product.service.impl;

import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.annotation.DataSource;
import com.ruoyi.common.enums.DataSourceType;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.db.domain.ProductInfo;
import com.ruoyi.db.domain.ProductPush;
import com.ruoyi.db.mapper.ProductInfoMapper;
import com.ruoyi.db.mapper.ProductPushMapper;
import com.ruoyi.market.constant.RedisKeyConstent;
import com.ruoyi.product.service.IProductInfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDate;
import java.util.Date;
import java.util.List;
import java.util.Map;

/**
 * 产品信息（下游/甲方）Service业务层处理
 * 
 * @author ruoyi
 * @date 2022-07-31
 */
@Service
@DataSource(DataSourceType.SLAVE)
public class ProductInfoServiceImpl implements IProductInfoService 
{
    @Resource
    private ProductInfoMapper productInfoMapper;
    @Resource
    private ProductPushMapper productPushMapper;
    @Autowired
    RedisTemplate redisTemplate;

    /**
     * 查询产品信息（下游/甲方）
     * 
     * @param id 产品信息（下游/甲方）主键
     * @return 产品信息（下游/甲方）
     */
    @Override
    public ProductInfo selectProductInfoById(Long id)
    {
        return productInfoMapper.selectProductInfoById(id);
    }

    /**
     * 查询产品信息（下游/甲方）列表
     * 
     * @param productInfo 产品信息（下游/甲方）
     * @return 产品信息（下游/甲方）
     */
    @Override
    public List<ProductInfo> selectProductInfoList(ProductInfo productInfo)
    {
        return productInfoMapper.selectProductInfoList(productInfo);
    }

    /**
     * 查询产品信息（下游/甲方）列表
     *
     * @param productInfo 产品信息（下游/甲方）
     * @return 产品信息（下游/甲方）
     */
    @Override
    public List<Map<String, Object>> selectProductInfoListMap(ProductInfo productInfo)
    {
        return productInfoMapper.selectProductInfoListMap(productInfo);
    }

    /**
     * 新增产品信息（下游/甲方）
     * 
     * @param productInfo 产品信息（下游/甲方）
     * @return 结果
     */
    @Override
    public int insertProductInfo(ProductInfo productInfo)
    {
        productInfo.setCreateTime(DateUtils.getNowDate());
        return productInfoMapper.insertProductInfo(productInfo);
    }

    /**
     * 修改产品信息（下游/甲方）
     * 
     * @param productInfo 产品信息（下游/甲方）
     * @return 结果
     */
    @Override
    public int updateProductInfo(ProductInfo productInfo)
    {

//        更新产品上架信息
        ProductPush productPush = new ProductPush();
        productPush.setProductId(productInfo.getId());
        productPush.setProductPrice(productInfo.getPriceAmount());
        productPush.setUpdateTime(new Date());
        productPush.setProductLogo(productInfo.getLogoUrl());
        productPush.setProductName(productInfo.getProductName());
        productPushMapper.updateProductPushByProductId(productPush);

        productInfo.setUpdateTime(DateUtils.getNowDate());
        int i = productInfoMapper.updateProductInfo(productInfo);

        String nowDate = LocalDate.now().toString();
        String redisKey = StrUtil.format(RedisKeyConstent.PRODUCT_DAY_UV_COUNT_KEY, nowDate, productInfo.getId());
        String redisProInfoKey = StrUtil.format(RedisKeyConstent.PRODUCT_INFO_KEY_PREFIX, productInfo.getId());
        if (i>0){
            redisTemplate.delete(redisKey);
            redisTemplate.delete(redisProInfoKey);
        }
        return i;
    }

    /**
     * 批量删除产品信息（下游/甲方）
     * 
     * @param id 需要删除的产品信息（下游/甲方）主键
     * @return 结果
     */
    @Override
    public int deleteProductInfoByIds(String id)
    {
        ProductInfo productInfo = new ProductInfo();
        productInfo.setId(Long.valueOf(id));
        productInfo.setDelFlag(1);
        int i = productInfoMapper.updateProductInfo(productInfo);
        if (i<=0){
            return i;
        }

        ProductPush productPush = new ProductPush();
        productPush.setProductId(Long.valueOf(Long.valueOf(id)));
        productPush.setDelFlag(1);
        int i1 = productPushMapper.updateProductPushByProductId(productPush);

        return i;
    }

    /**
     * 删除产品信息（下游/甲方）信息
     * 
     * @param id 产品信息（下游/甲方）主键
     * @return 结果
     */
    @Override
    public int deleteProductInfoById(Long id)
    {
        return productInfoMapper.deleteProductInfoById(id);
    }

    @Override
    public List<Map<String, Object>> listMap(ProductInfo productInfo) {
        return productInfoMapper.listMap(productInfo);
    }

    @Override
    public List<Map<String, Object>> listMapPush() {
        return productInfoMapper.listMapPush();
    }

}
